/**
 * 开关状态控制命令
 * 处理设备开关状态的设置和响应
 */
import BaseCommand from './baseCommand';

class SwitchStateCommand extends BaseCommand {
  // 命令类型
  static CMD = 0x02;

  /**
   * 创建查询命令
   * @param {boolean} state - 开关状态，true为开，false为关
   * @returns {Uint8Array} 控制命令帧
   */
  static createQuery(state) {
    console.log('[开关控制] 创建命令:', state ? '开启' : '关闭');
    
    // 创建数据部分：1字节表示状态
    const data = new Uint8Array(1);
    data[0] = state ? 1 : 0;
    
    return this.packFrame(this.CMD, data);
  }

  /**
   * 解析响应数据
   * @param {Uint8Array} frame - 完整的响应帧
   * @returns {Object|null} 解析结果
   */
  static parseResponse(frame) {
    console.log('[开关控制] 开始解析响应');
    
    // 先进行基础帧解析
    const baseResult = this.parseBaseFrame(frame);
    if (!baseResult) return null;

    // 验证命令类型
    if (baseResult.cmd !== this.CMD) {
      console.warn('[开关控制] 命令类型不匹配:', `0x${baseResult.cmd.toString(16)}`, `预期: 0x${this.CMD.toString(16)}`);
      return null;
    }

    // 验证数据长度
    if (baseResult.data.length !== 1) {
      console.warn('[开关控制] 数据长度不正确:', baseResult.data.length, '预期: 1');
      return null;
    }

    try {
      // 解析开关状态：0表示关闭，1表示开启
      const state = baseResult.data[0] === 1;
      console.log('[开关控制] 解析成功:', state ? '开启' : '关闭');
      return { 
        success: true,
        state: state
      };
    } catch (err) {
      console.error('[开关控制] 数据解析错误:', err);
      return null;
    }
  }
}

export default SwitchStateCommand; 